package main

import (
	"fmt"
	uuid "github.com/satori/go.uuid"
	"learn/global"
	"learn/initialize"
	"learn/pkg/utils/log"
	"os"
	"os/signal"
	"syscall"
)

func main() {

	//1. 初始化logger
	initialize.InitLogger()

	//2. 初始化配置文件
	initialize.InitConfig()

	//3. 初始化db
	initialize.InitDB()

	//4. 初始化routers
	Router := initialize.Routers()

	//服务注册
	serviceId := fmt.Sprintf("%s", uuid.NewV4())
	register_client, err := initialize.InitRegister(serviceId)

	if err != nil {
		log.LogrusObj.Panic("服务注册失败:", err.Error())
	}

	log.LogrusObj.Infoln("启动服务器, 端口： %d", global.ServerConfig.Port)
	go func() {
		if err := Router.Run(fmt.Sprintf(":%d", global.ServerConfig.Port)); err != nil {
			log.LogrusObj.Error("启动失败:", err.Error())
		}
	}()
	//接收终止信号
	quit := make(chan os.Signal)
	signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
	<-quit

	log.LogrusObj.Println("注销服务器")

	if err = register_client.DeRegister(serviceId); err != nil {
		log.LogrusObj.Infoln("注销失败:", err.Error())
		//zap.S().Info("注销失败:", err.Error())
	} else {
		log.LogrusObj.Infoln("注销成功")
	}
}
